/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jandan.persistence.iface;

//import com.ibatis.common.util.PaginatedList;
import java.util.List;

import com.jandan.ui.model.Word;
 
/**
 * 单词数据访问接口
 * @author gong
 * @version 1.0
 * @see com.jandan.persistence.sqlmapdao.WordSqlMapDao
 */
public interface WordDao {
	/**
	 * 获取某个单词
	 * @param wordID 单词ID
	 * @return 单词
	 */
    Word getWordByWordID(long wordID);
    
    /**
     * 根据英文单词获取某个单词
     * @param wordEn 英文单词
     * @return 单词
     */
    Word getWordByWordEn(String wordEn);
    
    /**
     * 获取某个词库某个位置的单词
     * @param wordLibID
     * @param position
     * @return
     */
    Word getWordOfOnePositionByWordLibID(long wordLibID, int position);
    
    /**
     * 获取某个用户生词本中某个位置的单词,<span style='font-style:italic;'>此方法可能会被弃用</span>
     * @param userID
     * @param position
     * @return
     */
    Word getStrangeWordOfOnePositionByUserID(long userID, int position);
    
    /**
     * 插入单词
     * @param word 单词
     * @return 单词ID
     */
    long insertWord(Word word);
    
    /**
     * 更新单词
     * @param word 单词
     */
    void updateWord(Word word);
    
    /**
     * 删除单词
     * @param wordID 单词ID
     */
    void deleteWord(long wordID);
    
    /**
     * 获取某个词库的所有单词
     * @param wordLibID 词库ID
     * @return 单词列表
     */
    List<Word> getWordListByWordLibID(long wordLibID);
    
    /**
     * 获取某个词库的部分单词,<strong>用于分页</strong>
     * @param wordLibID 词库ID
     * @param offset    起始位置
     * @param limit     要获取单词的个数
     * @return          单词列表
     */
    List<Word> getWordListByWordLibID(long wordLibID, int offset, int limit);
    
    /**
     * 获取某个课程的某个小词库的未学单词
     * @param lessonID  课程ID
     * @param wordLibID 词库ID
     * @param offset    小词库的起始位置
     * @param limit     小词库的单词数
     * @return  单词列表
     */
	List<Word> getNewWordListByWordLibID(long lessonID, long wordLibID,
			int offset, int limit);
    
	/**
	 * 获取某个用户的生词本上的单词,<span style='font-style:italic;'>此方法可能会被弃用</span>
	 * @param userID 用户ID
	 * @return 单词列表
	 */
    List<Word> getStrangeWordListByUserID(long userID);
    
    /**
     * 获取某个用户的生词本上的某部分单词,<span style='font-style:italic;'>此方法可能会被弃用</span>
     * @param userID 用户ID
     * @param offset 生词本上的起始位置
     * @param limit  要获取的生词的数目
     * @return 单词列表
     */
	List<Word> getStrangeWordListByUserID(long userID, int offset, int limit);
	
	/**
	 * 获取某个用户生词本上的某个分组的未学单词,<span style='font-style:italic;'>此方法可能会被弃用</span>
	 * @param userID 用户ID
	 * @param offset 生词本上分组的起始位置
	 * @param limit  生词本上分组的数目
	 * @return
	 */
	List<Word> getNewStrangeWordListByUserID(long userID, int offset, int limit);
	
	/**
	 * 获取某个用户生词本上的单词总数,<span style='font-style:italic;'>此方法可能会被弃用</span>
	 * @param userID
	 * @return
	 */
	int getStrangeWordCountByUserID(long userID);
	
	/**
	 * 获取要查找的单词中的一部分单词，<strong>用于分页</strong>
	 * @param word  要查找的单词的字符串
	 * @param offset 起始位置
	 * @param limit  单词数目
	 * @param wordLibID 词库ID
	 * @return 单词列表
	 */
	List<Word> getSearchedWordList(String word, int offset, int limit, long wordLibID);
	
	/**
	 * 插入生词,<span style='font-style:italic;'>此方法可能会被弃用</span>
	 * @param word
	 * @param userID
	 */
	void insertStrangeWord(Word word, long userID);
	
	/**
	 * 获取要查找的单词的总数
	 * @param word      要查找的单词的字符串
	 * @param wordLibID 词库ID
	 * @return 单词数目
	 */
	int getSearchedWordCount(String word, long wordLibID);
	
	/**
	 * 获取某个词库的单词总数
	 * @param wordLibID 词库ID
	 * @return 单词数目
	 */
	int getTotalWordCountOfWordLib(long wordLibID);
	
	/**
	 * 删除某个中文例句对
	 * @param csID 中文例句对ID
	 */
	void deleteCnAndSentence(long csID);
	
	/**
	 * 根据某个词库的英文单词获取单词
	 * @param wordEn 英文单词
	 * @param wordLibID 词库ID
	 * @return 单词
	 */
	Word getWordByWordEnAndWordLibID(String wordEn, long wordLibID);
}
